/*
 * @(#)IXfslAlgorithmConstants.java        1.0 2000/05/09
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfsl.model;


/**
 * Interfaz que describe las constantes utiilzadas en los algoritmos de aprendizaje
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public interface IXfslAlgorithmConstants {

	//----------------------------------------------------------------------------//
	//                            COSTANTES P�BLICAS                              //
	//----------------------------------------------------------------------------//

	/**
	 * Retropropagaci�n de errores
	 */
	public int BACKPROP = 0;

	/**
	 * Retropropagaci�n de errores
	 */
	public int INCREMENTALBACKPROP = 1;
	
	/**
	 * Retropropagaci�n con momento
	 */
	public int BACKPROPMOM = 2;
	
	/**
	 * Learning rate adaptativo
	 */
	public int ADAPTLEARNRATE = 3;
	
	/**
	 * Step size adaptativo
	 */
	public int ADAPTSTEPSIZE = 4;
	
	/**
	 * Manhattan
	 */
	public int MANHATTAN = 5;
	
	/**
	 * Retropropagaci�n r�pida de Falhman
	 */
	public int QUICKPROP = 6;
	
	/**
	 * Resilient propagation de Riedmiller y Braun
	 */
	public int RPROP = 7;

	/**
	 * Steepest descent
	 */
	public int STEEPEST = 8;
	
	/**
	 * Versi�n de Polak-Ribiere del algoritmo de gradiente conjugado
	 */
	public int POLAK_RIBIERE = 9;

	/**
	 * Versi�n de Fletcher-Reeves del algoritmo de gradiente conjugado
	 */
	public int FLETCHER_REEVES = 10;

	/**
	 * Versi�n de Hestenes-Stiefel del algoritmo de gradiente conjugado
	 */
	public int HESTENES_STIEFEL = 11;

	/**
	 * Algoritmo One Step Secant de Battiti
	 */
	public int ONE_STEP_SECANT = 12;
	
	/**
	 * Gradiente conjugado escalado
	 */
	public int SCALED = 13;
	
	/**
	 * Algoritmo Davidon-Fletcher-Powell
	 */
	public int DFP = 14;
	
	/**
	 * Algoritmo Broyden-Fletcher-Goldarfb-Shanno
	 */
	public int BFGS = 15;
	
	/**
	 * Marquardt-Levenberg
	 */
	public int MARQUARDT = 16;
	
	/**
	 * Gauss-Newton
	 */
	public int GAUSS = 17;
	
	/**
	 * B�squeda ciega
	 */
	public int BLIND = 18;
	
	/**
	 * Downhill simplex
	 */
	public int SIMPLEX = 19;
	
	/**
	 * Algoritmo de Powell
	 */
	public int POWELL = 20;

	/**
	 * Enfriamiento simulado con esquema lineal
	 */
	public int LINEAR_ANNEALING = 21;
	
	/**
	 * Enfriamiento simulado con esquema exponencial
	 */
	public int EXPONENTIAL_ANNEALING = 22;
	
	/**
	 * Enfriamiento simulado con esquema cl�sico
	 */
	public int CLASSICAL_ANNEALING = 23;

	/**
	 * Enfriamiento simulado con esquema r�pido
	 */
	public int FAST_ANNEALING = 24;

	/**
	 * Enfriamiento simulado con esquema lineal
	 */
	public int ADAPTIVE_ANNEALING = 25;

	/**
	 * Nombres de las familias de algoritmos
	 */
	public String famname[] =
	{"Gradient Descent", "Conjugate Gradient", "Quasi-Newton", "No derivatives", "Simulated annealing" };

	/**
	 * C�digos de los algoritmos de cada familia
	 */
	public int famcode[][] =
	{ { STEEPEST, BACKPROP, INCREMENTALBACKPROP, BACKPROPMOM, ADAPTLEARNRATE, ADAPTSTEPSIZE,
		QUICKPROP, MANHATTAN, RPROP },
		{ POLAK_RIBIERE, FLETCHER_REEVES, HESTENES_STIEFEL, ONE_STEP_SECANT, SCALED },
		{ DFP, BFGS, MARQUARDT, GAUSS },
		{ SIMPLEX, POWELL, BLIND },
		{ LINEAR_ANNEALING, EXPONENTIAL_ANNEALING, CLASSICAL_ANNEALING, FAST_ANNEALING, ADAPTIVE_ANNEALING }		
	};

	//----------------------------------------------------------------------------//
	// Tipos de par�metros                                                        //
	//----------------------------------------------------------------------------//

	/**
	 * Tipo de par�metro: positivo ( 0<p )
	 */
	public static final int POSITIVE = 0;
	
	/**
	 * Tipo de par�metro: decremento ( 0<p<1 )
	 */
	public static final int DECREASE = 1;
	
	/**
	 * Tipo de par�metro: incremento ( 1<p )
	 */
	public static final int INCREASE = 2;
	
	/**
	 * Tipo de par�metro: momento ( 0<p<=1)
	 */
	public static final int MOMENTUM = 3;
	
	/**
	 * Tipo de par�metro: reducci�n ( 0<p<=0.5 )
	 */
	public static final int REDUCE = 4;
	
	/**
	 * Tipo de par�metro: entero
	 */
	public static final int INTEGER = 5;

}
